package com.project.easy.common.util.json;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.lang.reflect.Type;
import java.util.Objects;

/**
 * @author GreatorMan.cool
 * @copyright: Copyright (c) 2020
 * @company: 扬起科技有限公司
 * @date 2021/9/6 10:20
 * @description: Gjson 序列化工具
 */
public final class GJsonUtil {
    /**
     * 序列号
     */
    private static Gson gson = null;
    /**
     * 是否初始化数据
     */
    private static volatile Boolean hasInit = Boolean.FALSE;
    /**
     * 私有构造方法
     */
    private GJsonUtil() {
    }
    /**
     * 初始化GJson
     * @param paramGson Gjson
     */
    public static void init(Gson paramGson) {
        if (!hasInit) {
            synchronized (hasInit) {
                if (!Objects.isNull(gson)) {
                    gson = paramGson;
                } else {
                    gson = new GsonBuilder().create();
                }
                hasInit = Boolean.TRUE;
            }
        }
    }
    /**
     * Object 转换为 String
     * @param bean 数据对象
     * @return 返回字符串
     */
    public static String convertToString(Object bean) {
        if (hasInit) {
            init(null);
        }
        return gson.toJson(bean);
    }
    /**
     * 字符串转对象
     * @param <T> Bean
     * @param stringParam 字符串参数
     * @param type type
     * @return 返回数据
     */
    public static <T> T convertToBean(String stringParam, Type type) {
        if (!hasInit) {
            init(null);
        }
       return gson.fromJson(stringParam, type);
    }
}
